package pcgen.android;

import org.apache.commons.lang.StringUtils;

import android.util.Log;

public final class Logger 
{
	public static void d(String tag, String msg)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.DEBUG))
			Log.d(tag, msg);
	}
	  
	public static void d(String tag, String msg, String value)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.DEBUG))
			Log.d(tag, format(msg, value));
	}
	  
	public static void d(String tag, String msg, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.DEBUG))
			Log.d(tag, msg, tr);
	}
	  
	public static void e(String tag, String msg)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.ERROR))
			Log.e(tag, msg, null);
	}
	  
	public static void e(String tag, String msg, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.ERROR))
			Log.e(tag, msg, tr);
	}
	  
	public static void e(String tag, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.ERROR))
			Log.e(tag, "", tr);
	}
	  
	public static void i(String tag, String msg)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.INFO))
			Log.i(tag, msg);
	}
	  
	public static void i(String tag, String msg, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.INFO))
			Log.i(tag, msg, tr);
	}
	  
	public static String getStackTraceString(Throwable tr)
	{
		return Log.getStackTraceString(tr);
	}
	  
	public static boolean isLoggable(String arg0, int arg1)
	{
		return Log.isLoggable(arg0, arg1);
	}
	  
	public static int println(int arg0, String arg1, String arg2)
	{
		return Log.println(arg0, arg1, arg2);
	}
	
	public static void v(String tag, String msg)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.VERBOSE))
			Log.v(tag, msg);
	}
	  
	public static void v(String tag, String msg, String value)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.VERBOSE))
			Log.v(tag, format(msg, value));
	}
	  
	public static void v(String tag, String msg, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.VERBOSE))
			Log.v(tag, msg, tr);
	}
	  
	public static void w(String tag, String msg)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.WARN))
			Log.w(tag, msg);
	}
	  
	public static void w(String tag, String msg, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.WARN))
			Log.w(tag, msg, tr);
	}
	  
	public static void w(String tag, Throwable tr)
	{
		tag = validateTag(tag);
		if (Log.isLoggable(tag, Log.WARN))
			Log.w(tag, tr);
	}
	
	protected static String format(String msg, Object value)
	{
		return String.format(FormatMessage, msg, value);
	}
	
	protected static String validateTag(String tag)
	{
		if (StringUtils.isEmpty(tag))
			return tag;
		
		return tag.substring(0, (tag.length() > 23 ? 23 : tag.length()));
	}
	
	protected static final String FormatMessage = "{0} {1}";
}
